#! /usr/bin/env python
# -*- coding: utf-8 -*-

# 这是一个典型的生产者消费者问题，处理机制如下：有n个生产者和一个消费者，它们共享一块内存区域
# n个生产者相互竞争，唯一的消费者和它们一起竞争，若某一个生产者取得锁，则其他生产者和唯一的消费者
# 休眠，这个得到锁的生产者将自己获得的信息放入这块内存区域，这里注意，每个生产者只会放入一条信息
# 若唯一的消费者获得锁，它会读取该内存区域内所有的信息。

import time
import threading
import queue

#最大线程数
THREAD_NUM=20

#休眠时间
SLEEP_TIME=0.1
#当消费者在队列为空TIMEOUT秒后自动退出
TIMEOUT=5

#这个队列是用来控制线程数量的,用get获取权限
global THREAD_NUM_lockQ
THREAD_NUM_lockQ=queue.Queue(THREAD_NUM)
#初始化，放入权限
[THREAD_NUM_lockQ.put(1) for i in range(0,THREAD_NUM)]

#多线程类
class Thread(threading.Thread):

	#传入的数据
	data=None

	#初始化,data是传入的数据
	def __init__(self,fun,data):
		super(Thread,self).__init__()
		self.func=fun
		self.data=data

	#run方法执行传进来的函数，并通过THREAD_NUM_lockQ来控制线程数
	def run(self):
		global THREAD_NUM_lockQ
		#判断是否超过最大线程数，获得运行权力
		THREAD_NUM_lockQ.get()
		#执行函数
		self.func(self.data)
		#运行完放回权力
		THREAD_NUM_lockQ.put(1)
